home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / lists / mint / l_0399 / 118 < prev    next >
Internet Message Format  |  1994-08-27  |  5KB

  1. From: Julian F. Reschke <julian@GOEDEL.UNI-MUENSTER.DE>
  2. Subject: FUTIME
  3. Date: Thu, 25 Feb 93 23:24:33 MET DST
  4.  
  5. Proposal for new Fcntl opcodes (2nd attempt)
  6. --------------------------------------------
  7.  
  8. #define FUTIME      (('F'<< 8) | 3)
  9. #define FTRUNCATE   (('F'<< 8) | 4)
  10.  
  11. These new Fcntl calls can be implemented by loadable (or builtin) file
  12. systems.
  13.  
  14.  
  15. Descriptions (party copied from POSIX.1 and SunOS manual pages):
  16. ------------
  17.  
  18. struct mutimbuf {
  19.     unsigned short actime, acdate;    /* GEMDOS format */
  20.     unsigned short modtime, moddate;
  21. };
  22.  
  23. LONG Fcntl (WORD fh, struct mutimbuf *times, FUTIME);
  24.  
  25. Sets the access and modification times of the named file.
  26.  
  27. The times argument is interpreted as a pointer to a mutimbuf structure,
  28. and the access and modification times are set to the values contained
  29. in the designated structure.
  30.  
  31. Returns: 0 (OK), EINVFN (opcode not available) or another error code.
  32.  
  33.  
  34.  
  35. LONG Fcntl (WORD fh, LONG length, FTRUNCATE);
  36.  
  37. This Fcntl opcode causes the file referred to by fh to have a size equal
  38. to length bytes. If the file was previously longer than length, the
  39. extra bytes are removed from the file. If it was shorter, bytes between
  40. the old and new lengths are read as zeroes. The file must be open for
  41. writing.
  42.  
  43. Returns: 0 (OK), EINVFN (opcode not available) or another error code.
  44.  
  45.  
  46. Example
  47. -------
  48.  
  49. Here's a working utime() binding from my own PureC library. It's based
  50. on the original MiNT lib version, so it shouldn't be a problem to
  51. change it back.
  52.  
  53. #define FUTIME      (('F'<< 8) | 3)
  54.  
  55. struct mutimbuf {
  56.     unsigned int actime, acdate;    /* GEMDOS format */
  57.     unsigned int modtime, moddate;
  58. };
  59.  
  60. int
  61. utime (const char *path, const struct utimbuf *times)
  62. {
  63.     int fh;
  64.     time_t actime, modtime;
  65.     struct mutimbuf settime;
  66.     long ret = -32L;
  67.     
  68.     if (times)
  69.     {
  70.         actime = times->actime;
  71.         modtime = times->modtime;
  72.     }
  73.     else
  74.     {
  75.         time (&actime);
  76.         modtime = actime;    
  77.     }
  78.  
  79.     DOUnixtime2Tos (actime, &settime.acdate, &settime.actime);
  80.     DOUnixtime2Tos (modtime, &settime.moddate, &settime.modtime);
  81.  
  82.     fh = (int) Fopen (path, 2);
  83.  
  84.     if (fh < 0)
  85.     {
  86.         errno = -fh;
  87.         return -1;
  88.     }
  89.  
  90.     if (DOMintVersion () > 9L)
  91.         ret = Fcntl (fh, (long) &settime, FUTIME);
  92.         
  93.     if (-32L == ret)
  94.     {
  95.         DOSTIME D;
  96.         
  97.         D.date = settime.moddate;
  98.         D.time = settime.modtime;
  99.     
  100.         ret = Fdatime (&D, fh, 1);
  101.     }
  102.     
  103.     if ((fh = Fclose(fh)) != 0)
  104.     {
  105.         errno = -fh;
  106.         return -1;
  107.     }
  108.  
  109.     return 0;
  110. }
  111.  
  112.  
  113. Diff's for ydisk 0.6
  114. --------------------
  115.  
  116. *** yd.c    Thu Jan 28 09:53:36 1993
  117. --- yd.new    Thu Feb 25 20:54:10 1993
  118. ***************
  119. *** 30,36 ****
  120. --- 30,44 ----
  121.   
  122.   #define TOS_ATTRIB 0x3f
  123.   
  124. + #define FUTIME      (('F'<< 8) | 3)
  125. + struct mutimbuf {
  126. +     unsigned short actime, acdate;    /* GEMDOS format */
  127. +     unsigned short modtime, moddate;
  128. + };
  129.   void *safety_buffer;
  130.   long safety_bufsize        = SAFETY_BUFSIZE;
  131.   long current_sbufsize    = 0;
  132.   long max_memusage        = UNLIMITED;
  133. ***************
  134. *** 595,602 ****
  135.       xattr->gid        = f -> gid;
  136.       xattr->mtime    = f -> mtime;
  137.       xattr->mdate    = f -> mdate;
  138. !     xattr->atime     = f -> mtime;
  139. !     xattr->adate    = f -> mdate;
  140.       xattr->ctime    = f -> ctime;
  141.       xattr->cdate    = f -> cdate;
  142.   
  143. --- 603,610 ----
  144.       xattr->gid        = f -> gid;
  145.       xattr->mtime    = f -> mtime;
  146.       xattr->mdate    = f -> mdate;
  147. !     xattr->atime     = f -> atime;
  148. !     xattr->adate    = f -> adate;
  149.       xattr->ctime    = f -> ctime;
  150.       xattr->cdate    = f -> cdate;
  151.   
  152. ***************
  153. *** 1456,1461 ****
  154. --- 1464,1489 ----
  155.       else return f->pos;
  156.   }
  157.   
  158. + /* jr: new function to set access and modification times */
  159. + static long y_utime( FILEPTR *f, struct mutimbuf *buf )
  160. + {
  161. +     Y_FILE *yf;
  162. +     check_stuff();
  163. +     yf = &y_files[f->fc.index];
  164. +     
  165. +     yf -> mdate = buf -> moddate;
  166. +     yf -> mtime = buf -> modtime;
  167. +     yf -> adate = buf -> acdate;
  168. +     yf -> atime = buf -> actime;
  169. +     return 0;
  170. + }
  171.   long y_ioctl( FILEPTR *f, short mode, void *buf )
  172.   {
  173.       Y_FILE *yf;
  174. ***************
  175. *** 1474,1479 ****
  176. --- 1502,1509 ----
  177.       case FIONWRITE:
  178.           * (long *) buf = MAX_BLOCK; /* arbitrary, but this is a good value */
  179.           return 0;
  180. +     case FUTIME:
  181. +         return y_utime( f, buf );
  182.       default:
  183.           DEBUG(("y_ioctl: mode %d not supported",mode));
  184.           return EINVFN;
  185.  
  186.  
  187. -- 
  188. ________________ cut here _________________________
  189. Julian F. Reschke, Hensenstr. 142, D-W4400 Muenster
  190.   eMail: julian@math.uni-muenster.de, jr@ms.maus.de
  191. ________ correct me if I'm wrong __________________
  192.  
  193. !]>PKN%I6+IHN])N\>
  194. MPX,!["<5;U.M@ZVIM]/N(%[-J&+=K;.6L5W4<&TK\><N3=;R"X=)N6\YVG7,
  195. MG3)F!K[.$'UHZ;LV35/%HP=?$J*EM9]ZYA6;EORL+%<][=.>]UK=Z_K8-7H4
  196. M[&K?5]5H7+30N[I[:OK).HMGENTT,!D_>P&F#"3@M'#-HQ$NYNQ+TSK6(5ZU
  197. MHQ8 ;RR ]8?[5FR I9V[(IQBSKJ^)=L;QH\<,O:]9OY?=KEZ[48?L-'+)PQ?
  198. MNH>HJ'5C#<O(3^K<!80@R+A[96D%HU>NA*>@U#>(T:1'+QPW?6[.'H:EBU39
  199. MR(3Y[I953!=LFVE;,FHEO)IT&<-^ZT-E!R&<%C =/".$'06;6IU#*N9LG :@
  200. MT;ANS=TRL6L)H\<PVL%X(:*ITNJF_<^:\3;M&C$.>MF+5ZS<W4&;<5G>L632
  201. MM;Z=JF^<V+, FLW3=I#=1![W":NWT-Q!AN'3-X[ +; .VL&>S!&@R#163EBR
  202. MNVU6QM7XH' /]9%Z=M6+9DFWK'3&T>,Z["FWE6FQ;,WB;$+9PQ>.6H'L,W39
  203. MX21UL!O3G";IZD H.WK1U=+O(O.]TSJ"WTN&WM[N'-?O;>#4U$.MMP*+?-VO
  204. M>OVKEWF%%A4$HO30@HNGK5R\3PGS5ZGN7% -W=6S=O9IY#6*U3VC=NW<NVSM
  205. MNW=-W;IFY=,V[9L]@MGCQVT#F#1Z!^K%X"9)RR9O[QPZ<[/2MVM2T3!"NR5_
  206. M?[:K;X;21$=1'5HU8.F#@/KYE\/[^S462ZIH,$@  -RGQ/T"            
  207. J                                                     /R#
  208.  
  209. end
  210.